package br.ufc.quixada.model.entidades;
import java.util.Collection;
import java.util.ArrayList;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;

@Entity
@Table(name="atividades")
public class Atividade {

	@Id
	@GeneratedValue
	private int id;
	
	@Column(length = 100, nullable=true)
	private String nome;
	
	@Column(nullable=true)
	private int vagas;
	
	@Column(name="aceita_inscricoes", columnDefinition="boolean default true")
	private boolean aceitaInscricoes;
	
	@OneToOne
	@JoinColumn(name="tipo_id")
	private TipoAtividade tipo;
	
	@OneToMany
	@JoinTable (name="atividades_horarios",
	joinColumns = @JoinColumn (name="atividade_id"),
	inverseJoinColumns = @JoinColumn (name="horario_id"))
	Collection<Horario> horarios;
	
	@ManyToMany
	@JoinTable (name = "atividades_responsaveis",
	joinColumns = @JoinColumn (name ="atividade_id"),
	inverseJoinColumns = @JoinColumn (name ="responsavel_id"))
	Collection<Perfil> responsaveis;
	
	@ManyToMany
	@JoinTable (name = "atividades_inscricoes",
	joinColumns = @JoinColumn (name ="atividade_id"),
	inverseJoinColumns = @JoinColumn (name ="inscricao_id"))
	Collection<Inscricao> inscricoes; 
	
	
	public Atividade(){
		horarios = new ArrayList<Horario>();
		responsaveis = new ArrayList<Perfil>();
		inscricoes = new ArrayList<Inscricao>();
	}
	
	public int getId() {
		return id;
	}
	
	public void setId(int id) {
		this.id = id;
	}
	
	public String getNome() {
		return nome;
	}
	
	public void setNome(String nome) {
		this.nome = nome;
	}
	
	public int getVagas() {
		return vagas;
	}
	
	public void setVagas(int vagas) {
		this.vagas = vagas;
	}
	
	public boolean isAceitaInscricoes() {
		return aceitaInscricoes;
	}
	
	public void setAceitaInscricoes(boolean aceitaInscricoes) {
		this.aceitaInscricoes = aceitaInscricoes;
	}
	
	public TipoAtividade getTipo() {
		return tipo;
	}
	
	public void setTipo(TipoAtividade tipo) {
		this.tipo = tipo;
	}

	public Collection<Horario> getHorarios() {
		return horarios;
	}

	public void setHorarios(Collection<Horario> horarios) {
		this.horarios = horarios;
	}
	
	public void addHorarioAtividade(Horario horario){
		horarios.add(horario);
	}

	public Collection<Perfil> getResponsaveis() {
		return responsaveis;
	}

	public void setResponsaveis(Collection<Perfil> responsaveis) {
		this.responsaveis = responsaveis;
	}
	
	public void addResponsavelAtividade(Perfil perfil){
		this.responsaveis.add(perfil);
	}

	public Collection<Inscricao> getInscricoes() {
		return inscricoes;
	}

	public void setInscricoes(Collection<Inscricao> inscricoes) {
		this.inscricoes = inscricoes;
	}
	
	public void addInscricaoAtividade(Inscricao inscricao){
		this.inscricoes.add(inscricao);
	}
	
}
